home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #12 / Amiga Plus CD - 2002 - No. 12.iso / Tools / Development / source-highlight-1.6.1 / tests / test.l < prev    next >
Text File  |  2002-11-17  |  4KB  |  143 lines

  1. %{
  2. /*
  3.  * Copyright (C) 1999, 2000, 2001  Lorenzo Bettini <bettini@gnu.org>
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  */
  20.  
  21. static int lineno = 1 ; /* number of scanned lines */
  22. //char linebuf[1024] ; /* current code line in the source */
  23. //int tokenpos = 0 ; /* current token position in the current line */
  24.  
  25. //#include "tags.h"
  26. //#include "tokens.h"
  27. //#include "colors.h"
  28.  
  29. #include "genfun.h"
  30.  
  31. %}
  32. %option prefix="java_scanner_"
  33. %option noyywrap
  34.  
  35. ws [ ]+
  36. tabs [\t]+
  37.  
  38. nl \n
  39. cr \r
  40. IDE [a-zA-Z_]([a-zA-Z0-9_])*
  41. wspace [ \t\n\r]
  42.  
  43. STRING \"[^\"\n]*\"
  44.  
  45. not_alpha [^a-zA-Z0-9]
  46.  
  47. %s COMMENT_STATE
  48. %s SINGLELINE_COMMENT
  49. %s STRING_STATE
  50. %s CHAR_STATE
  51.  
  52. keyword (abstract|assert|break|case|catch|class|const|continue|default|do|else|extends|final|finally|for|goto|if|implements|instanceof|interface|native|new|null|package|private|protected|public|return|static|super|switch|synchronized|throw|throws|this|transient|try|volatile|while)
  53. basetype (int|byte|boolean|char|long|float|double|short|void)
  54. symbol [\~\!\%\^\*\(\)\-\+\=\[\]\|\\\:\;\,\.\/\?\&\<\>]
  55. funccall {IDE}/{wspace}*\(
  56.  
  57. %%
  58.  
  59.  
  60.  
  61. \r {}
  62.  
  63. <INITIAL>"/*" { BEGIN COMMENT_STATE ;
  64.  startComment( yytext ) ;      
  65. }
  66. <INITIAL>"/*".*"*/" { generateComment( yytext ) ;  }
  67.  
  68.  
  69. <COMMENT_STATE>\n { 
  70.    endComment (""); 
  71.    ++lineno;
  72.    generateNewLine() ;
  73.    startComment ("");
  74.    /* if we encounter another // during a comment we simply
  75.       treat it as a ordinary string */
  76.  }
  77. <COMMENT_STATE>"*/" { endComment(yytext) ;
  78.                       BEGIN INITIAL ; /* end of the comment */ }
  79.  
  80. <INITIAL>"//" { BEGIN SINGLELINE_COMMENT ; startComment( yytext ) ; }
  81. <SINGLELINE_COMMENT>\n { 
  82.    BEGIN INITIAL ;
  83.    yyless (0); // put the \n back
  84.    endComment( yytext ) ; 
  85.    /* if we encounter another // during a comment we simply
  86.       treat it as a ordinary string */
  87.  }
  88.  
  89. <INITIAL>\" { BEGIN STRING_STATE ; startString( yytext );  }
  90. <STRING_STATE>\\\\ {  generate_preproc( yytext ) ; }
  91. <STRING_STATE>"\\\"" {  generate_preproc( yytext ) ; }
  92. <STRING_STATE>\n { 
  93.    endString (""); 
  94.    ++lineno;
  95.    generateNewLine() ;
  96.    startString ("");
  97. }
  98. <STRING_STATE>\" { BEGIN INITIAL ; endString( yytext ) ; }
  99.  
  100. <INITIAL>\' { BEGIN CHAR_STATE ; startString( yytext );  }
  101. <CHAR_STATE>\\\\ {  generate_preproc( yytext ) ; }
  102. <CHAR_STATE>"\\\'" {  generate_preproc( yytext ) ; }
  103. <CHAR_STATE>\' { BEGIN INITIAL ; endString( yytext ) ; }
  104.  
  105. <INITIAL>{keyword}  { generateKeyWord( yytext ) ; }
  106. <INITIAL>{basetype} { generateBaseType( yytext ) ; }
  107. <INITIAL>{symbol} { generateSymbol( yytext ); }
  108. <INITIAL>[\{\}] { generateCBracket ( yytext ); }
  109.  
  110. <INITIAL>0[xX][0-9a-fA-F]* { generateNumber( yytext ) ; }
  111. <INITIAL>[0-9][0-9]*(\.[0-9]*[eE]?[-+]?[0-9]*)? { generateNumber( yytext ) ; }
  112.  
  113. <INITIAL>{keyword}/{wspace}*\( { generateKeyWord( yytext ) ; }
  114. <INITIAL>{basetype}/{wspace}*\( { generateBaseType( yytext ) ; }
  115. <INITIAL>{funccall} { generateFunction ( yytext ); }
  116.  
  117. <INITIAL>import { generatePreProc( yytext) ; }
  118.  
  119. <INITIAL>[a-zA-Z_]([a-zA-Z0-9_])* { generate_normal( yytext ) ; }
  120.  
  121. \t {
  122.         generateTab() ;
  123. }
  124.  
  125. . { generate_preproc( yytext ) ; /* anything else */ }
  126.  
  127. \n { 
  128.        ++lineno;
  129.        generateNewLine() ;
  130. }
  131.  
  132. %%
  133. /*
  134. void yyerror( char *s ) ;
  135.  
  136. void yyerror( char *s )
  137. {  
  138.   fprintf( stderr, "%d: %s: %s\n%s\n", lineno, s, yytext, linebuf ) ;
  139.   fprintf( stderr, "%*s\n", tokenpos, "^" ) ;
  140. }
  141. */
  142. /* vim:set ft=flex expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
  143.